package com.zjw.yyyy2021.mmdd1013;

import java.util.ArrayList;
import java.util.List;

/**
 * <p>TODO</p>
 *
 * @author 郑大仙丶
 * @version V1.0.0
 * @date 2021/10/13 22:13
 */
public class MMdd1013 {
    public List<Integer> spiralOrder(int[][] matrix) {
        List<Integer> res = new ArrayList<>();
        if(matrix == null || matrix.length == 0 || matrix[0].length == 0){
            return res;
        }
        // 声明左，右，上，下坐标
        int rows = matrix.length,columns = matrix[0].length;
        int left = 0,right = columns - 1,top = 0,bottom = rows - 1;
        // 开始循环，从最外层到最内层，
        while(left <= right && top <= bottom){
            // 顶层从左上到右上
            for(int column = left; column <= right;column++ ){
                res.add(matrix[top][column]);
            }
            // 从最右上到右下
            for(int row = top + 1; row <= bottom;row++){
                res.add(matrix[row][right]);
            }
            // 如果出现最后剩一个横行，不能向右走
            if(left < right && top < bottom) {
                // 从右下到左下
                for (int column = right - 1; column >= left; column--) {
                    res.add(matrix[bottom][column]);
                }
                // 从左下到左上
                for (int row = bottom - 1; row >= top + 1; row--) {
                    res.add(matrix[row][left]);
                }
            }
            left++;
            right--;
            top++;
            bottom--;
        }
        return res;
    }

}
